﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AGPR.Locadora.Model;
using AGPR.Locadora.Utils;
using AGPR.Locadora.Web.Models;

namespace AGPR.Locadora.Web.Controllers
{
    public class LocacoesController : BaseController
    {
        #region Index

        public ActionResult Index()
        {
            return RedirectToAction("consultar");
        }

        #endregion

        #region Cadastrar Locação

        public ActionResult Cadastrar(int? cliente = null)
        {
            ViewBag.Title = "Nova Locação";
            ViewBag.DataPrevista = Locacao.dataPrevista;

            if (cliente != null)
            {
                ViewBag.Cliente = Cliente.Get(cliente);
            }

            return View();
        }

        [HttpPost]
        public ActionResult Cadastrar(Locacoes locacao)
        {
            locacao.id_funcionario = this.usuario.id;
            locacao.Create().Cadastrar();

            return this.Index();
        }

        #endregion

        #region Devolução

        public ActionResult Devolucao(int id)
        {
            var item = Locacao.Get(id);

            ViewBag.Title = "Devolução de Locação";
            ViewBag.Locacao = item;

            return PartialView();
        }

        [HttpPost]
        public ActionResult Devolucao(int id, FormCollection dados)
        {
            Locacao.Get(id).Devolver(dados);

            return Redirect(Request.UrlReferrer.PathAndQuery);
        }

        #endregion

        #region Cancelar

        public ActionResult Cancelar(int id)
        {
            var item = Locacao.Get(id);

            ViewBag.Title = "Cancelar Locação";
            ViewBag.Locacao = item;

            return PartialView();
        }

        [HttpPost]
        public ActionResult Cancelar(int id, FormCollection dados)
        {
            Locacao.Get(id).Cancelar();

            return Redirect(Request.UrlReferrer.PathAndQuery);
        }

        #endregion

        #region Alterar Locação

        public ActionResult Alterar(int id)
        {
            var item = Locacao.Get(id);

            if (item == null)
            {
                return this.Index();
            }

            ViewBag.Title = "Alterar Locação";
            ViewBag.Locacao = item;

            return View();
        }

        [HttpPost]
        public ActionResult Alterar(int id, Locacoes locacao)
        {
            ViewBag.Title = "Alterar Locação";
            ViewBag.Locacao = locacao.Alterar();

            return this.Index();
        }

        #endregion

        #region Visualizar Locação

        public ActionResult Visualizar(int id)
        {
            var item = Locacao.Get(id);

            if (item == null)
            {
                return this.Index();
            }

            ViewBag.Title = "Visualizar";
            ViewBag.Locacao = item;

            if (Request.IsAjaxRequest())
            {
                return PartialView();
            }
            else
            {
                return View();
            }
        }

        #endregion

        #region Consultar Locações

        public ActionResult Consultar(int p = 1)
        {
            ViewBag.Title = "Consulta de Locações";
            ViewBag.Total = Locacao.Total();
            ViewBag.Paginacao = Paginacao.init(ViewBag.Total, p);
            ViewBag.Locacoes = Locacao.GetAll(ViewBag.Paginacao.Offset);
            ViewBag.TotalPagina = ViewBag.Locacoes.Count;

            if (Request.IsAjaxRequest())
            {
                return PartialView();
            }
            else
            {
                return View();
            }
        }

        #endregion
    }
}
